_cccc_oooo_nnnn_nnnn_llll_dddd - line discipline for unique stream connections
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
_cccc_oooo_nnnn_nnnn_llll_dddd is a STREAMS-based module that provides unique connections between
server and client processes. It can only be pushed (see _ssss_tttt_rrrr_eeee_aaaa_mmmm_iiii_oooo(7))
onto one end of a STREAMS-based pipe that may subsequently be attached to
a name in the filesystem name space. After the pipe end is attached, a
new pipe is created internally when an originating process attempts to
_oooo_pppp_eeee_nnnn(2) or _cccc_rrrr_eeee_aaaa_tttt(2) the filesystem name. A file descriptor for one end
of the new pipe is packaged into a message identical to that for the
_iiii_oooo_cccc_tttt_llll _IIII______SSSS_EEEE_NNNN_DDDD_FFFF_DDDD (see _ssss_tttt_rrrr_eeee_aaaa_mmmm_iiii_oooo(7)) and is transmitted along the stream to
the server process on the other end. The originating process is blocked
until the server responds.
The server responds to the _IIII______SSSS_EEEE_NNNN_DDDD_FFFF_DDDD request by accepting the file
descriptor through the _IIII______RRRR_EEEE_CCCC_VVVV_FFFF_DDDD _iiii_oooo_cccc_tttt_llll message. When this happens, the
file descriptor associated with the other end of the new pipe is
transmitted to the originating process as the file descriptor returned
from _oooo_pppp_eeee_nnnn(2) or _cccc_rrrr_eeee_aaaa_tttt(2).
If the server does not respond to the _IIII______SSSS_EEEE_NNNN_DDDD_FFFF_DDDD request, the stream that
the _cccc_oooo_nnnn_nnnn_llll_dddd module is pushed on becomes uni-directional because the server
can not retrieve any data off the stream until the _IIII______RRRR_EEEE_CCCC_VVVV_FFFF_DDDD request is
issued. If the server process exits before issuing the _IIII______RRRR_EEEE_CCCC_VVVV_FFFF_DDDD request,
the _oooo_pppp_eeee_nnnn(2) or the _cccc_rrrr_eeee_aaaa_tttt(2) system calls will fail and return -1 to the
originating process.
When the _cccc_oooo_nnnn_nnnn_llll_dddd module is pushed onto a pipe, messages going back and
forth through the pipe are ignored by _cccc_oooo_nnnn_nnnn_llll_dddd.
On success, an open of _cccc_oooo_nnnn_nnnn_llll_dddd returns 0. On failure, _eeee_rrrr_rrrr_nnnn_oooo is set to the
following values:
_EEEE_IIII_NNNN_VVVV_AAAA_LLLL A stream onto which _cccc_oooo_nnnn_nnnn_llll_dddd is being pushed is not a pipe or
the pipe does not have a write queue pointer pointing to a
stream head read queue.
_EEEE_IIII_NNNN_VVVV_AAAA_LLLL The other end of the pipe onto which _cccc_oooo_nnnn_nnnn_llll_dddd is being pushed
is linked under a multiplexor.
_EEEE_PPPP_IIII_PPPP_EEEE _cccc_oooo_nnnn_nnnn_llll_dddd is being pushed onto a pipe end whose other end is no
longer there.
_EEEE_NNNN_OOOO_MMMM_EEEE_MMMM An internal pipe could not be created.
_EEEE_NNNN_XXXX_IIII_OOOO An _MMMM______HHHH_AAAA_NNNN_GGGG_UUUU_PPPP message is at the stream head of the pipe onto
which _cccc_oooo_nnnn_nnnn_llll_dddd is being pushed.
_EEEE_AAAA_GGGG_AAAA_IIII_NNNN Internal data structures could not be allocated.